home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / OldSrc / CH10 / SRC / OBJGRID2.CLS < prev    next >
Text File  |  1996-05-04  |  6KB  |  225 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "ObjGrid3D"
  6. Attribute VB_Creatable = False
  7. Attribute VB_Exposed = False
  8. Option Explicit
  9.  
  10. Private Xmin As Single      ' Min X and Y values.
  11. Private Zmin As Single
  12. Private Dx As Single        ' Spacing between rows of data.
  13. Private Dz As Single
  14. Private NumX As Integer     ' Number of X and Y entries.
  15. Private NumZ As Integer
  16. Private Points() As Point3D ' Data values.
  17.  
  18. ' ************************************************
  19. ' Return the value of Dz.
  20. ' ************************************************
  21. Property Get DeltaZ() As Single
  22.     DeltaZ = Dz
  23. End Property
  24. ' ************************************************
  25. ' Return the value of Dx.
  26. ' ************************************************
  27. Property Get DeltaX() As Single
  28.     DeltaX = Dx
  29. End Property
  30.  
  31.  
  32. ' ************************************************
  33. ' Create the Points array.
  34. ' ************************************************
  35. Sub SetBounds(x1 As Single, DeltaX As Single, xnum As Integer, z1 As Single, DeltaZ As Single, znum As Integer)
  36. Dim i As Integer
  37. Dim j As Integer
  38. Dim x As Single
  39. Dim z As Single
  40.  
  41.     Xmin = x1
  42.     Zmin = z1
  43.     Dx = DeltaX
  44.     Dz = DeltaZ
  45.     NumX = xnum
  46.     NumZ = znum
  47.     ReDim Points(1 To NumX, 1 To NumZ)
  48.     
  49.     x = Xmin
  50.     For i = 1 To NumX
  51.         z = Zmin
  52.         For j = 1 To NumZ
  53.             Points(i, j).coord(1) = x
  54.             Points(i, j).coord(2) = 0
  55.             Points(i, j).coord(3) = z
  56.             Points(i, j).coord(4) = 1#
  57.             z = z + Dz
  58.         Next j
  59.         x = x + Dx
  60.     Next i
  61. End Sub
  62. ' ************************************************
  63. ' Save the indicated data value.
  64. ' ************************************************
  65. Sub SetValue(x As Single, y As Single, z As Single)
  66. Dim i As Integer
  67. Dim j As Integer
  68.  
  69.     i = (x - Xmin) / Dx + 1
  70.     j = (z - Zmin) / Dz + 1
  71.     Points(i, j).coord(2) = y
  72. End Sub
  73.  
  74. ' ***********************************************
  75. ' Return a string indicating the object type.
  76. ' ***********************************************
  77. Property Get ObjectType() As String
  78.     ObjectType = "GRID"
  79. End Property
  80.  
  81.  
  82.  
  83. ' ***********************************************
  84. ' Fix the data coordinates at their transformed
  85. ' values.
  86. ' ***********************************************
  87. Public Sub FixPoints()
  88. Dim i As Integer
  89. Dim j As Integer
  90. Dim k As Integer
  91.  
  92.     For i = 1 To NumX
  93.         For j = 1 To NumZ
  94.             For k = 1 To 3
  95.                 Points(i, j).coord(k) = Points(i, j).trans(k)
  96.             Next k
  97.         Next j
  98.     Next i
  99. End Sub
  100.  
  101. ' ************************************************
  102. ' Apply a transformation matrix which may not
  103. ' contain 0, 0, 0, 1 in the last column to the
  104. ' object.
  105. ' ************************************************
  106. Public Sub ApplyFull(M() As Single)
  107. Dim i As Integer
  108. Dim j As Integer
  109.  
  110.     For i = 1 To NumX
  111.         For j = 1 To NumZ
  112.             m3ApplyFull Points(i, j).coord, M, Points(i, j).trans
  113.         Next j
  114.     Next i
  115. End Sub
  116.  
  117. ' ************************************************
  118. ' Apply a transformation matrix to the object.
  119. ' ************************************************
  120. Public Sub Apply(M() As Single)
  121. Dim i As Integer
  122. Dim j As Integer
  123.  
  124.     For i = 1 To NumX
  125.         For j = 1 To NumZ
  126.             m3Apply Points(i, j).coord, M, Points(i, j).trans
  127.         Next j
  128.     Next i
  129. End Sub
  130.  
  131.  
  132. ' ************************************************
  133. ' Apply a nonlinear transformation.
  134. ' ************************************************
  135. Public Sub Distort(D As Object)
  136. Dim i As Integer
  137. Dim j As Integer
  138.  
  139.     For i = 1 To NumX
  140.         For j = 1 To NumZ
  141.             D.Distort Points(i, j).coord(1), Points(i, j).coord(2), Points(i, j).coord(3)
  142.         Next j
  143.     Next i
  144. End Sub
  145.  
  146. ' ************************************************
  147. ' Write a grid to a file using Write.
  148. ' Begin with "GRID" to identify this object.
  149. ' ************************************************
  150. Public Sub FileWrite(filenum As Integer)
  151. Dim i As Integer
  152. Dim j As Integer
  153.  
  154.     ' Write basic information.
  155.     Write #filenum, _
  156.         "GRID", Xmin, Zmin, Dx, Dz, NumX, NumZ
  157.         
  158.     ' Write the Z values.
  159.     For i = 1 To NumX
  160.         For j = 1 To NumZ
  161.             Write #filenum, Points(i, j).coord(2)
  162.         Next j
  163.     Next i
  164. End Sub
  165.  
  166.  
  167.  
  168. ' ************************************************
  169. ' Draw the transformed points on a Form, Printer,
  170. ' or PictureBox.
  171. ' ************************************************
  172. Public Sub Draw(canvas As Object, Optional r As Variant)
  173. Dim i As Integer
  174. Dim j As Integer
  175.  
  176.     On Error Resume Next
  177.         
  178.     ' Draw lines parallel to the X axis.
  179.     For i = 1 To NumX
  180.         canvas.CurrentX = Points(i, 1).trans(1)
  181.         canvas.CurrentY = Points(i, 1).trans(2)
  182.         For j = 2 To NumZ
  183.             canvas.Line -(Points(i, j).trans(1), _
  184.                           Points(i, j).trans(2))
  185.         Next j
  186.     Next i
  187.     
  188.     ' Draw lines parallel to the Y axis.
  189.     For j = 1 To NumZ
  190.         canvas.CurrentX = Points(1, j).trans(1)
  191.         canvas.CurrentY = Points(1, j).trans(2)
  192.         For i = 2 To NumX
  193.             canvas.Line -(Points(i, j).trans(1), _
  194.                           Points(i, j).trans(2))
  195.         Next i
  196.     Next j
  197. End Sub
  198.  
  199.  
  200. ' ************************************************
  201. ' Read a grid from a file using Input.
  202. ' Assume the "GRID" label has alreaDz been
  203. ' read.
  204. ' ************************************************
  205. Public Sub FileInput(filenum As Integer)
  206. Dim i As Integer
  207. Dim j As Integer
  208.  
  209.     ' Get the basic information.
  210.     Input #filenum, Xmin, Zmin, Dx, Dz, NumX, NumZ
  211.     
  212.     ' Allocate the Points array and set the X and
  213.     ' Y values.
  214.     SetBounds Xmin, Dx, NumX, Zmin, Dz, NumZ
  215.     
  216.     ' Read the Z values.
  217.     For i = 1 To NumX
  218.         For j = 1 To NumZ
  219.             Input #filenum, Points(i, j).coord(2)
  220.         Next j
  221.     Next i
  222. End Sub
  223.  
  224.  
  225.